<?php

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$prekey = 'keyttl:';

/**
 * ttl()
* 如果key不存在或者已过期，返回 -2
* 如果key存在并且没有设置过期时间（永久有效），返回 -1 。
* 不存在的key无法设置过期时间 
* 字符串类型 
  如果key已经保存了一个值，那么这个操作会直接覆盖原来的值，并且忽略原始类型。
  当set命令执行成功之后，之前设置的过期时间都将失效

  其他符合类型操作key的自段不会改变过期时间
  但是通常我们不知道，是否是第一次添加成员，所以每一次添加成员，都要判断是第一次才添加过期时间
*/
//
$key = $prekey. 'unset';
$redis->expire($key, 120);
$data[$key]= [
    'ttl' => $redis->ttl($key),
    'data' => $redis->get($key)
];

$key = $prekey. 'reset';
$redis->set($key, 1);
$redis->expire($key, 120);
$redis->set($key, 2);
$data[$key]= [
    'ttl' => $redis->ttl($key),
    'data' => $redis->get($key)
];



$key = $prekey. 'string';
$redis->set($key, rand(1,100));
$redis->expire($key, 120);

$data[$key]= [
    'ttl' => $redis->ttl($key),
    'data' => $redis->get($key)
];


$key = $prekey. 'list';
$redis->lpush($key, rand(1,100));
$redis->expire($key, 120);

$data[$key]= [
    'ttl' => $redis->ttl($key),
    'data' => $redis->lRange($key, 0, -1)
];

$key = $prekey. 'zset';
$redis->zadd($key, rand(1,100), random_bytes(3));
$redis->expire($key, 120);

$redis->zadd($key, 200, 'new');
$redis->expire($key, 180); //再次设置会更新过期时间

$data[$key]= [
    'ttl' => $redis->ttl($key),
    'data' => $redis->zRange($key, 0, -1)
];

var_dump($data);